博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路_保留原搜索页面条件
阅读量:5171 次
发布时间:2019-06-13

本文共 3446 字,大约阅读时间需要 11 分钟。

  保留原搜索条件的总体思路是在展示页面中,获取去url中的相关搜索条件参数,将此参数保留存放在页面中如编辑或者删除按钮的链接路径中,实现编辑或者删除后,视图再次获得url之前保存的页面搜索相关参数,与重定向url拼接后 ,即可实现原路返回原页面位置。

具体介绍如下:

'''实现方式一:    列表页面:        获取当前所有条件,添加到             - 编辑按钮的URL后面            - 添加按钮的URL后面    编辑或添加页面:        - POST提交时,获取原来列表页面传过来的条件        - 拼接URL  /hosts/?原来的条件            list页面:        list_condition = request.GET.urlencode()            {% for item in host_list %}            
  • {
    { item }} 编辑
  • {% endfor %} add/edit页面:http://127.0.0.1:8000/edit/10/?page=5&id__gt=4 def edit_host(request,pk): if request.method == "GET": return render(request,'edit_host.html') else: # 修改成功 /hosts/?page=5&id__gt=4 url = "/hosts/?%s" %(request.GET.urlencode()) return redirect(url) 实现方式二:(更安全) list页面: http://127.0.0.1:8000/hosts/?page=5&id__gt=4 params = QueryDict(mutable=True) params['_list_filter'] = request.GET.urlencode() list_condition = params.urlencode() {% for item in host_list %}
  • {
    { item }} 编辑
  • {% endfor %} add/edit页面:http://127.0.0.1:8000/edit/54/?_list_filter=page%3D5%26id__gt%3D4 def edit_host(request,pk): if request.method == "GET": return render(request,'edit_host.html') else: # 修改成功 /hosts/?page=5&id__gt=4 url = "/hosts/?%s" %(request.GET.get('_list_filter')) return redirect(url)'''

      说明:如请求路径为http://127.0.0.1:8000/hosts/?page=5&id__gt=4,request.GET.urlencode()获得请求路径中的整体条件page=5&id__gt=4,request.GET结果是QueryDict数据类型,默认QueryDict数据类型不可编辑,但是如(params = QueryDict(mutable=True))设置mutable=True,QueryDict数据类型将变得可编辑。分如下两种情况:

    #1、已有QueryDict设置:request.GET                                                        #(QueryDict对象)request.GET._mutable = True #2、新建QueryDict设置:params = QueryDict(mutable=True)

    应用实例:

    渲染页面编辑按钮函数:
    from django.http import QueryDict    def edit(self,obj=None,is_header=False):        if is_header:            return '编辑'        query_str = self.request.GET.urlencode()                                                           # page=2&nid=1        if query_str:            params = QueryDict(mutable=True)            params[self._query_param_key] = query_str            return mark_safe('编辑' %(self.get_change_url(obj.id),params.urlencode(),)) # /stark/app01/userinfo/        return mark_safe('编辑' % (self.get_change_url(obj.id),))                          # /stark/app01/userinfo/

      处理编辑页面的视图函数:

    def change_view(self,request,nid,*args,**kwargs):        # self.model_class.objects.filter(id=nid)        obj = self.model_class.objects.filter(pk=nid).first()        if not obj:            return redirect(self.get_list_url())        model_form_class = self.get_model_form_class()        # GET,显示标签+默认值        if request.method == 'GET':            form = model_form_class(instance=obj)            return render(request,'stark/change_view.html',{
    'form':form}) else: form = model_form_class(instance=obj,data=request.POST) if form.is_valid(): form.save() list_query_str = request.GET.get(self._query_param_key) list_url = "%s?%s" %(self.get_list_url(),list_query_str,) return redirect(list_url) return render(request, 'stark/change_view.html', {
    'form': form})

     

    转载于:https://www.cnblogs.com/seven-007/p/8512152.html

    你可能感兴趣的文章
    Nginx负载均衡
    查看>>
    【bzoj3456】城市规划(多项式求逆+dp)
    查看>>
    #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用
    查看>>
    linux源码中的核心数据结构
    查看>>
    EF执行SQL语句
    查看>>
    Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
    查看>>
    webpack 样式表抽离成专门的单独文件并且设置版本号
    查看>>
    个人作业week7——前端开发感想总结
    查看>>
    VC Dimension -衡量模型与样本的复杂度
    查看>>
    android 中 ViewPager 的平常用法 ViewPager+ Views
    查看>>
    POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang
    查看>>
    ZOJ 1654 二分匹配基础题
    查看>>
    【玩转Ubuntu】02. Ubuntu上搭建Android开发环境
    查看>>
    [蓝桥杯][2017年第八届真题]小计算器(模拟)
    查看>>
    dede上怎么让所有链接在新窗口打开
    查看>>
    关于PHP性能优化(转)
    查看>>
    浙江理工2015.12校赛-F Landlocked
    查看>>
    一步步学习微软InfoPath2010和SP2010--第四章节--处理SP列表表单(1)--SP列表基础...
    查看>>
    golang AES/ECB/PKCS5 加密解密 url-safe-base64
    查看>>
    我是如何用两个星期解决了本来需要两个月而且维护成本巨大的功能(解决思路与方法)...
    查看>>